API авторизация
В качестве механизма авторизации используется WSSE.
Получение токена
PUT | /_api/v1/security/token |
|---|
Для получения токена необходимо отправить PUT запрос по адресу /_api/v1/security/token со следующими параметрами:
| Параметр | Тип данных | Описание |
|---|---|---|
username | string | Имя пользователя |
password | string | Пароль |
При успешном выполнении будет возвращена структура вида:
{
"token": "QwERty..."
}
Использование токена
Необходимо сформировать специальный HTTP заголовок X-WSSE и передавать его в каждом запросе.
Пример генерации заголовка на языке PHP
$username = 'john.doe';
$token = 'QwERty...';
$nonce = hash('sha512', uniqid(true));
$created = date('r');
$digest = base64_encode(sha1(base64_decode($nonce) . $created . $token, true));
$request->setHeader('X-WSSE', 'UsernameToken Username="' . $username . '", PasswordDigest="' . $digest . '", Nonce="' . $nonce . '", Created="' . $created . '"');
| Параметр | Описание |
|---|---|
$username | Имя пользователя |
$token | Токен авторизации |
$nonce | Одноразовый код (подробнее на wikipedia.ru) |
$created | Текущее время в формате ISO 8601, например: 2004-02-12T15:19:21+00:00 |
$digest | Дайджест. Особое внимание следует обратить на то, что sha1 возвращает хэш в виде бинарных данных (второй аргумент true) |
Пример генерации заголовка на Javascript
const CryptoJS = require('crypto-js');
const username = 'username';
const token = 'token';
// Генерируем уникальный nonce на каждый запрос
const nonce = CryptoJS.lib.WordArray.random(16).toString(CryptoJS.enc.Hex);
const created = new Date().toISOString();
// PasswordDigest = Base64(SHA1(nonce + created + token))
const digest = CryptoJS.SHA1(nonce + created + token);
const passwordDigest = CryptoJS.enc.Base64.stringify(digest);
// Собираем заголовок
const wsseHeader = `UsernameToken Username="${username}", PasswordDigest="${passwordDigest}", Nonce="${btoa(nonce)}", Created="${created}"`;